"""
中间件使用示例 - 展示Gua框架的声明式中间件系统
基于Linus设计哲学：简单胜过复杂
"""

from gua import GuaApp, respond, cors, logging, auth

app = GuaApp()

# 使用声明式中间件 - 一行配置
app.use(cors("*", "GET,POST,PUT,DELETE"))
app.use(logging("请求: {method} {path}"))

# 默认保护所有路径，只列出公开路径
app.use(auth(public_paths=["/", "/public"], auth_func=lambda token: token.startswith("Bearer admin-token")))

@app.route("/")
async def home():
    """主页"""
    return respond("<h1>中间件示例</h1><p><a href='/public'>公共数据</a> | <a href='/admin'>管理员数据</a></p>")

@app.route("/public")
async def public():
    """公共数据 - 无需认证"""
    return respond({"message": "这是公共数据", "timestamp": "2024-01-01"})

@app.route("/admin")
async def admin():
    """管理员数据 - 需要认证"""
    return respond({"message": "这是管理员数据", "users": ["admin1", "admin2"]})

@app.route("/api/data")
async def api_data():
    """API数据示例 - 需要认证"""
    return respond({"data": [1, 2, 3, 4, 5], "source": "middleware_demo"})

@app.route("/login")
async def login():
    """登录页面 - 公开访问"""
    return respond({"message": "登录页面", "action": "请提供凭据"})

@app.route("/register")
async def register():
    """注册页面 - 公开访问"""
    return respond({"message": "注册页面", "action": "创建新账户"})

if __name__ == "__main__":
    import subprocess
    import sys
    
    # 使用gua命令显示示例启动信息
    result = subprocess.run([sys.executable, "-m", "gua.cli", "examples.middleware_app:app", "--example-info"],
                          capture_output=True, text=True)
    if result.returncode == 0:
        print(result.stdout)
    else:
        print("错误: 无法显示启动信息")
        print("请手动运行: gua examples.middleware_app:app --example-info")